library(opendatascot)
library(tidyverse)
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ─────────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
✓ ggplot2 3.3.3     ✓ purrr   0.3.4
✓ tibble  3.0.6     ✓ dplyr   1.0.2
✓ tidyr   1.1.2     ✓ stringr 1.4.0
✓ readr   1.4.0     ✓ forcats 0.5.0
── Conflicts ────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
ods_all_datasets() %>% 
  janitor::clean_names() %>% 
  filter(name == "Life Expectancy") %>% 
  select(uri)
ods_structure("healthy-life-expectancy")
$schemes
[1] "http://purl.org/linked-data/sdmx/2009/dimension#refArea"          
[2] "http://purl.org/linked-data/sdmx/2009/dimension#refPeriod"        
[3] "http://purl.org/linked-data/cube#measureType"                     
[4] "http://statistics.gov.scot/def/dimension/sex"                     
[5] "http://statistics.gov.scot/def/dimension/age"                     
[6] "http://statistics.gov.scot/def/dimension/simdQuintiles"           
[7] "http://statistics.gov.scot/def/dimension/urbanRuralClassification"

$categories
$categories$refArea
 [1] "S12000005" "S12000006" "S12000008" "S12000010" "S12000011" "S12000013" "S12000014" "S12000047" "S12000017"
[10] "S12000018" "S12000019" "S12000020" "S12000021" "S12000023" "S12000048" "S12000026" "S12000027" "S12000028"
[19] "S12000029" "S12000030" "S12000033" "S12000034" "S12000035" "S12000036" "S12000038" "S12000039" "S12000040"
[28] "S12000041" "S12000042" "S12000050" "S12000045" "S12000049" "S92000003" "S08000015" "S08000016" "S08000017"
[37] "S08000019" "S08000020" "S08000031" "S08000022" "S08000032" "S08000024" "S08000025" "S08000026" "S08000028"
[46] "S08000029" "S08000030"

$categories$refPeriod
[1] "P3Y" "P3Y" "P3Y"

$categories$measureType
[1] "count"                     "95-lower-confidence-limit" "95-upper-confidence-limit"

$categories$sex
[1] "male"   "female"

$categories$age
 [1] "0-years"     "1-4-years"   "5-9-years"   "10-14-years" "15-19-years" "20-24-years" "25-29-years" "30-34-years"
 [9] "35-39-years" "40-44-years" "45-49-years" "50-54-years" "55-59-years" "60-64-years" "65-69-years" "70-74-years"
[17] "75-79-years" "80-84-years" "85-89-years" "90-years"   

$categories$simdQuintiles
[1] "all"              "1-most-deprived"  "2"                "3"                "4"               
[6] "5-least-deprived"

$categories$urbanRuralClassification
[1] "all"                    "large-urban-areas"      "other-urban-areas"      "accessible-small-towns"
[5] "remote-small-towns"     "accessible-rural"       "remote-rural"          
hle_structure <- ods_structure("healthy-life-expectancy")
hle_structure$categories$refPeriod <- c("2015-2017", "2016-2018", "2017-2019")
le_structure <- ods_structure("Life-Expectancy")
le_structure$categories$refPeriod
 [1] "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y"
[19] "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y"
ods_dataset("homelessness-applications",
                          applicationType = "all-applications")
ods_structure("healthy-life-expectancy")$categories$refPeriod
[1] "P3Y" "P3Y" "P3Y"
ods_structure("Life-Expectancy")$categories$refPeriod
 [1] "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y"
[19] "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y" "P3Y"
ods_structure("homelessness-applications")$categories$refPeriod
 [1] "2007-2008" "2008-2009" "2009-2010" "2010-2011" "2011-2012" "2012-2013" "2013-2014" "2014-2015" "2015-2016"
[10] "2016-2017" "2017-2018" "2018-2019" "2019-2020"
ods_dataset("healthy-life-expectancy",
            refPeriod = "P3Y",
            age = "0-years",
            simdQuintiles = "all",
            urbanRuralClassification = "all",
            measureType = "count") %>% 
  filter(age == "0-years") %>% 
  select(-c(simdQuintiles, measureType, urbanRuralClassification, age)) %>% 
  filter(refArea == "S92000003")
library(rgdal)
Loading required package: sp
rgdal: version: 1.5-18, (SVN revision 1082)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 3.1.4, released 2020/10/20
Path to GDAL shared files: /Library/Frameworks/R.framework/Versions/4.0/Resources/library/rgdal/gdal
GDAL binary built with GEOS: TRUE 
Loaded PROJ runtime: Rel. 6.3.1, February 10th, 2020, [PJ_VERSION: 631]
Path to PROJ shared files: /Library/Frameworks/R.framework/Versions/4.0/Resources/library/rgdal/proj
Linking to sp version:1.4-4
To mute warnings of possible GDAL/OSR exportToProj4() degradation,
use options("rgdal_show_exportToProj4_warnings"="none") before loading rgdal.
hb_shapes <- readOGR(
  dsn ="data/simplified_shapefiles/health_boards/NHS_HealthBoards_2019/",
  layer = "NHS_HealthBoards_2019",
  GDAL1_integer64_policy = TRUE)
Discarded datum OSGB_1936 in CRS definition: +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs
OGR data source with driver: ESRI Shapefile 
Source: "/Users/user/scot_stats_dashboard/data/simplified_shapefiles/health_boards/NHS_HealthBoards_2019", layer: "NHS_HealthBoards_2019"
with 14 features
It has 4 fields
library(rgeos)
rgeos version: 0.5-5, (SVN revision 640)
 GEOS runtime version: 3.8.1-CAPI-1.13.3 
 Linking to sp version: 1.4-2 
 Polygon checking: TRUE 
hb_simple <- gSimplify(hb_shapes, tol = 0.025, topologyPreserve = TRUE)

56.3950° N, 3.4308° W

uk_shape <- readOGR(
   dsn ="../Downloads/scot_stats_dashboard/bdline_essh_gb/Data/GB/",
   layer = "county_region",
   GDAL1_integer64_policy = TRUE)
Discarded datum OSGB_1936 in CRS definition: +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs
OGR data source with driver: ESRI Shapefile 
Source: "/Users/user/Downloads/scot_stats_dashboard/bdline_essh_gb/Data/GB", layer: "county_region"
with 26 features
It has 15 fields
Integer64 fields read as doubles:  NUMBER NUMBER0 POLYGON_ID UNIT_ID 
 
 uk_simple <- gSimplify(uk_shape, tol = 0.025, topologyPreserve = TRUE)
plot(uk_simple)
library(maps)

Attaching package: ‘maps’

The following object is masked from ‘package:purrr’:

    map
UK <- map_data("world") %>% filter(region == "UK")
UK
library(rnaturalearth)
library(rnaturalearthdata)
library(rgeos)
country_uk <- world %>%
  filter(name == "United Kingdom")
poly_uk <- as(country_uk, 'Spatial')
Discarded datum Unknown based on WGS84 ellipsoid in CRS definition
poly_uk@polygons
library(broom)
hle_map_data <- spdf_fortified %>% 
  left_join(hb_lookup, by = c("id" = "id")) %>% 
  left_join(hle_data, by = c("hb_name" = "reference_area"))
library(plotly)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
filtered_hle_data <- hle_map_data %>% 
  filter(ref_period == "2015-2017") %>%
  filter(sex =="male")
  

plotly::ggplotly( 
  ggplot() + 
    geom_polygon(data = hle_map_data,
                 aes(x = long, y = lat, group = group,
                     fill = healthy_life_expectancy,
                     text = paste0(hb_name, ": ", healthy_life_expectancy,"years")),
                 colour = "white", size = 0.25) +
    xlim(-7.7,-0.3) +
    scale_fill_viridis_c() +
    coord_map() +
    theme_void(),
  tooltip = "text"
) %>% config(displayModeBar = FALSE) %>%
  layout(xaxis = list(fixedrange = TRUE)) %>%
  layout(yaxis = list(fixedrange = TRUE))
Ignoring unknown aesthetics: text
my_map
hb_shapes@data <- hb_shapes@data %>% 
  janitor::clean_names() %>% 
  left_join(hle_2015_m, by = c("hb_name" = "reference_area"))
labels <- sprintf("<strong>%s</strong><br/>%g years",
                  hb_shapes$hb_name, hb_shapes$healthy_life_expectancy) %>%
  lapply(htmltools::HTML)
# add Health Board polygons, colour based on LE, highlight on hover

my_map %>% 
    addPolygons(data = hb_shapes, color = "white",
                fillColor = ~colorQuantile(
                  "YlOrRd", (-hb_shapes$healthy_life_expectancy))
                (-hb_shapes$healthy_life_expectancy),
                weight = 1, fillOpacity = 0.9, label = labels,
                highlightOptions = highlightOptions(
                  color = "black", weight = 2,
                  opacity = 0.9, bringToFront = TRUE))
LS0tCnRpdGxlOiAiRGF0YSBFeHRyYWN0YWN0aW9uIGFuZCBFeHBsb3JhdGlvbiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7cn0KbGlicmFyeShvcGVuZGF0YXNjb3QpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCmBgYHtyfQpvZHNfYWxsX2RhdGFzZXRzKCkgJT4lIAogIGphbml0b3I6OmNsZWFuX25hbWVzKCkgJT4lIAogIGZpbHRlcihuYW1lID09ICJMaWZlIEV4cGVjdGFuY3kiKSAlPiUgCiAgc2VsZWN0KHVyaSkKYGBgCgpgYGB7cn0Kb2RzX3N0cnVjdHVyZSgiaGVhbHRoeS1saWZlLWV4cGVjdGFuY3kiKQpgYGAKCgoKYGBge3J9CmhsZV9zdHJ1Y3R1cmUgPC0gb2RzX3N0cnVjdHVyZSgiaGVhbHRoeS1saWZlLWV4cGVjdGFuY3kiKQpgYGAKCgoKCmBgYHtyfQpobGVfc3RydWN0dXJlJGNhdGVnb3JpZXMkcmVmUGVyaW9kIDwtIGMoIjIwMTUtMjAxNyIsICIyMDE2LTIwMTgiLCAiMjAxNy0yMDE5IikKYGBgCgpgYGB7cn0KbGVfc3RydWN0dXJlIDwtIG9kc19zdHJ1Y3R1cmUoIkxpZmUtRXhwZWN0YW5jeSIpCmBgYAoKYGBge3J9CmxlX3N0cnVjdHVyZSRjYXRlZ29yaWVzJHJlZlBlcmlvZApgYGAKCmBgYHtyfQpvZHNfZGF0YXNldCgiaG9tZWxlc3NuZXNzLWFwcGxpY2F0aW9ucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlID0gImFsbC1hcHBsaWNhdGlvbnMiKQpgYGAKCgpgYGB7cn0Kb2RzX3N0cnVjdHVyZSgiaGVhbHRoeS1saWZlLWV4cGVjdGFuY3kiKSRjYXRlZ29yaWVzJHJlZlBlcmlvZApgYGAKCmBgYHtyfQpvZHNfc3RydWN0dXJlKCJMaWZlLUV4cGVjdGFuY3kiKSRjYXRlZ29yaWVzJHJlZlBlcmlvZApgYGAKCgpgYGB7cn0Kb2RzX3N0cnVjdHVyZSgiaG9tZWxlc3NuZXNzLWFwcGxpY2F0aW9ucyIpJGNhdGVnb3JpZXMkcmVmUGVyaW9kCmBgYAoKCgpgYGB7cn0Kb2RzX2RhdGFzZXQoImhlYWx0aHktbGlmZS1leHBlY3RhbmN5IiwKICAgICAgICAgICAgcmVmUGVyaW9kID0gIlAzWSIsCiAgICAgICAgICAgIGFnZSA9ICIwLXllYXJzIiwKICAgICAgICAgICAgc2ltZFF1aW50aWxlcyA9ICJhbGwiLAogICAgICAgICAgICB1cmJhblJ1cmFsQ2xhc3NpZmljYXRpb24gPSAiYWxsIiwKICAgICAgICAgICAgbWVhc3VyZVR5cGUgPSAiY291bnQiKSAlPiUgCiAgZmlsdGVyKGFnZSA9PSAiMC15ZWFycyIpICU+JSAKICBzZWxlY3QoLWMoc2ltZFF1aW50aWxlcywgbWVhc3VyZVR5cGUsIHVyYmFuUnVyYWxDbGFzc2lmaWNhdGlvbiwgYWdlKSkgJT4lIAogIGZpbHRlcihyZWZBcmVhID09ICJTOTIwMDAwMDMiKQpgYGAKCgoKCgoKYGBge3J9CgpgYGAKCgpgYGB7cn0KCmBgYAoKCmBgYHtyfQpobGVfZGF0YQpgYGAKCgpgYGB7cn0KbGlicmFyeShyZ2RhbCkKYGBgCgpgYGB7cn0KaGJfc2hhcGVzIDwtIHJlYWRPR1IoCiAgZHNuID0iZGF0YS9zaW1wbGlmaWVkX3NoYXBlZmlsZXMvaGVhbHRoX2JvYXJkcy9OSFNfSGVhbHRoQm9hcmRzXzIwMTkvIiwKICBsYXllciA9ICJOSFNfSGVhbHRoQm9hcmRzXzIwMTkiLAogIEdEQUwxX2ludGVnZXI2NF9wb2xpY3kgPSBUUlVFKQpgYGAKCgpgYGB7cn0KbGlicmFyeShyZ2VvcykKYGBgCgpgYGB7cn0KaGJfc2ltcGxlIDwtIGdTaW1wbGlmeShoYl9zaGFwZXMsIHRvbCA9IDAuMDA1LCB0b3BvbG9neVByZXNlcnZlID0gVFJVRSkKYGBgCgoKYGBge3J9CmhiX2xvb2t1cCA8LSBoYl9zaGFwZXNAZGF0YSAlPiUgCiAgc2VsZWN0KDEsMikgJT4lIAogIHJvd2lkX3RvX2NvbHVtbigiaWQiKSAlPiUKICBtdXRhdGUoaWQgPSBhcy5jaGFyYWN0ZXIoaWQtMSkpICU+JSAKICBqYW5pdG9yOjpjbGVhbl9uYW1lcygpCmBgYAoKNTYuMzk1MMKwIE4sIDMuNDMwOMKwIFcKCmBgYHtyfQpwbG90KGhiX3NpbXBsZSwgeGxpbSA9IGMoLTMuNjYsIC0zLjUwKSwgeWxpbSA9IGMoNTUsNjEpKQpgYGAKCmBgYHtyfQp1a19zaGFwZSA8LSByZWFkT0dSKAogICBkc24gPSIuLi9Eb3dubG9hZHMvc2NvdF9zdGF0c19kYXNoYm9hcmQvYmRsaW5lX2Vzc2hfZ2IvRGF0YS9HQi8iLAogICBsYXllciA9ICJjb3VudHlfZWxlY3QiLAogICBHREFMMV9pbnRlZ2VyNjRfcG9saWN5ID0gVFJVRSkKIAogdWtfc2ltcGxlIDwtIGdTaW1wbGlmeSh1a19zaGFwZSwgdG9sID0gMC4xLCB0b3BvbG9neVByZXNlcnZlID0gVFJVRSkKYGBgCgpgYGB7cn0KcGxvdCh1a19zaW1wbGUpCmBgYAoKCgoKCmBgYHtyfQpsaWJyYXJ5KG1hcHMpCmBgYAoKCmBgYHtyfQpVSyA8LSBtYXBfZGF0YSgid29ybGQiKSAlPiUgZmlsdGVyKHJlZ2lvbiA9PSAiVUsiKQpgYGAKCgpgYGB7cn0KVUsKYGBgCgpgYGB7cn0KbGlicmFyeShybmF0dXJhbGVhcnRoKQpsaWJyYXJ5KHJuYXR1cmFsZWFydGhkYXRhKQpsaWJyYXJ5KHJnZW9zKQpgYGAKCmBgYHtyfQp3b3JsZCA8LSBuZV9jb3VudHJpZXMoc2NhbGUgPSAibWVkaXVtIiwgcmV0dXJuY2xhc3MgPSAic2YiKQpgYGAKCmBgYHtyfQpjb3VudHJ5X3VrIDwtIHdvcmxkICU+JQogIGZpbHRlcihuYW1lID09ICJVbml0ZWQgS2luZ2RvbSIpCmBgYAoKYGBge3J9CnBvbHlfdWsgPC0gYXMoY291bnRyeV91aywgJ1NwYXRpYWwnKQpgYGAKCmBgYHtyfQpwb2x5X3VrQHBvbHlnb25zCmBgYAoKCmBgYHtyfQpoYl9zaW1wbGVfcG9seSA8LSBhcyhoYl9zaW1wbGUsICJTcGF0aWFsIikKYGBgCgpgYGB7cn0KbGlicmFyeShicm9vbSkKYGBgCgoKYGBge3J9CnNwZGZfZm9ydGlmaWVkIDwtIHRpZHkoaGJfc2ltcGxlLCByZWdpb24gPSAiY29kZSIpCmBgYAoKCgpgYGB7cn0Kc3BkZl9mb3J0aWZpZWQKYGBgCgpgYGB7cn0KaGxlX21hcF9kYXRhIDwtIHNwZGZfZm9ydGlmaWVkICU+JSAKICBsZWZ0X2pvaW4oaGJfbG9va3VwLCBieSA9IGMoImlkIiA9ICJpZCIpKSAlPiUgCiAgbGVmdF9qb2luKGhsZV9kYXRhLCBieSA9IGMoImhiX25hbWUiID0gInJlZmVyZW5jZV9hcmVhIikpCmBgYAoKYGBge3J9CmxpYnJhcnkocGxvdGx5KQpgYGAKCgpgYGB7cn0KZmlsdGVyZWRfaGxlX2RhdGEgPC0gaGxlX21hcF9kYXRhICU+JSAKICBmaWx0ZXIocmVmX3BlcmlvZCA9PSAiMjAxNS0yMDE3IikgJT4lCiAgZmlsdGVyKHNleCA9PSJtYWxlIikKICAKCnBsb3RseTo6Z2dwbG90bHkoIAogIGdncGxvdCgpICsgCiAgICBnZW9tX3BvbHlnb24oZGF0YSA9IGhsZV9tYXBfZGF0YSwKICAgICAgICAgICAgICAgICBhZXMoeCA9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBoZWFsdGh5X2xpZmVfZXhwZWN0YW5jeSwKICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMChoYl9uYW1lLCAiOiAiLCBoZWFsdGh5X2xpZmVfZXhwZWN0YW5jeSwieWVhcnMiKSksCiAgICAgICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDAuMjUpICsKICAgIHhsaW0oLTcuNywtMC4zKSArCiAgICBzY2FsZV9maWxsX3ZpcmlkaXNfYygpICsKICAgIGNvb3JkX21hcCgpICsKICAgIHRoZW1lX3ZvaWQoKSwKICB0b29sdGlwID0gInRleHQiCikgJT4lIGNvbmZpZyhkaXNwbGF5TW9kZUJhciA9IEZBTFNFKSAlPiUKICBsYXlvdXQoeGF4aXMgPSBsaXN0KGZpeGVkcmFuZ2UgPSBUUlVFKSkgJT4lCiAgbGF5b3V0KHlheGlzID0gbGlzdChmaXhlZHJhbmdlID0gVFJVRSkpCmBgYAoKYGBge3J9CmxpYnJhcnkobGVhZmxldCkKYGBgCgpgYGB7cn0KbXlfbWFwIDwtIGxlYWZsZXQob3B0aW9ucyA9IGxlYWZsZXRPcHRpb25zKG1pblpvb20gPSA2KSkgJT4lCiAgICBzZXRWaWV3KGxuZyA9IC01LCBsYXQgPSA1Ny4zNSwgem9vbSA9IDYpICU+JQogICAgIyByZXN0cmljdCB2aWV3IHRvIGFyb3VuZCBTY290bGFuZAogICAgc2V0TWF4Qm91bmRzKGxuZzEgPSAtMSwKICAgICAgICAgICAgICAgICBsYXQxID0gNTAsCiAgICAgICAgICAgICAgICAgbG5nMiA9IC05LAogICAgICAgICAgICAgICAgIGxhdDIgPSA2NCkgJT4lIAogIGFkZFByb3ZpZGVyVGlsZXMocHJvdmlkZXJzJENhcnRvREIuUG9zaXRyb25Ob0xhYmVscykKYGBgCgoKYGBge3J9Cm15X21hcApgYGAKCgoKCmBgYHtyfQpobGVfMjAxNV9tIDwtIGhsZV9kYXRhICU+JSAKICBmaWx0ZXIoc2V4ID09ICJtYWxlIikgJT4lIAogIGZpbHRlcihyZWZfcGVyaW9kID09ICIyMDE1LTIwMTciKQpgYGAKCgoKCgoKYGBge3J9CmhiX3NoYXBlc0BkYXRhIDwtIGhiX3NoYXBlc0BkYXRhICU+JSAKICBqYW5pdG9yOjpjbGVhbl9uYW1lcygpICU+JSAKICBsZWZ0X2pvaW4oaGxlXzIwMTVfbSwgYnkgPSBjKCJoYl9uYW1lIiA9ICJyZWZlcmVuY2VfYXJlYSIpKQpgYGAKCmBgYHtyfQpsYWJlbHMgPC0gc3ByaW50ZigiPHN0cm9uZz4lczwvc3Ryb25nPjxici8+JWcgeWVhcnMiLAogICAgICAgICAgICAgICAgICBoYl9zaGFwZXMkaGJfbmFtZSwgaGJfc2hhcGVzJGhlYWx0aHlfbGlmZV9leHBlY3RhbmN5KSAlPiUKICBsYXBwbHkoaHRtbHRvb2xzOjpIVE1MKQpgYGAKCgpgYGB7cn0KIyBhZGQgSGVhbHRoIEJvYXJkIHBvbHlnb25zLCBjb2xvdXIgYmFzZWQgb24gTEUsIGhpZ2hsaWdodCBvbiBob3ZlcgoKbXlfbWFwICU+JSAKICAgIGFkZFBvbHlnb25zKGRhdGEgPSBoYl9zaGFwZXMsIGNvbG9yID0gIndoaXRlIiwKICAgICAgICAgICAgICAgIGZpbGxDb2xvciA9IH5jb2xvclF1YW50aWxlKAogICAgICAgICAgICAgICAgICAiWWxPclJkIiwgKC1oYl9zaGFwZXMkaGVhbHRoeV9saWZlX2V4cGVjdGFuY3kpKQogICAgICAgICAgICAgICAgKC1oYl9zaGFwZXMkaGVhbHRoeV9saWZlX2V4cGVjdGFuY3kpLAogICAgICAgICAgICAgICAgd2VpZ2h0ID0gMSwgZmlsbE9wYWNpdHkgPSAwLjksIGxhYmVsID0gbGFiZWxzLAogICAgICAgICAgICAgICAgaGlnaGxpZ2h0T3B0aW9ucyA9IGhpZ2hsaWdodE9wdGlvbnMoCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgd2VpZ2h0ID0gMiwKICAgICAgICAgICAgICAgICAgb3BhY2l0eSA9IDAuOSwgYnJpbmdUb0Zyb250ID0gVFJVRSkpCmBgYAoKCgoKCgoK